﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using ECOSYSTEM_Dominio;

namespace ECOSYSTEM_DAL
{
    public class SerieDAL
    {
        SqlConnection cnn;
        public Boolean guardarSerie(Serie laSerie) { 
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("RegistrarSerie",cnn);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.AddWithValue("ProductoID",laSerie.ProductoID);
                cmd.Parameters.AddWithValue("RegCompraID", laSerie.RegCompraID);
                cmd.Parameters.AddWithValue("NroSerie", laSerie.NroSerie);
                cmd.Parameters.AddWithValue("FecRegEntrada",laSerie.FecEntradaSerie);
                cmd.Parameters.AddWithValue("Estado",laSerie.Estado);
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return true;
        }
        public Boolean ActualizarSerie(Serie laSerie)
        {
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("ActualizarSerie", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("SerieID", laSerie.SerieID);
                cmd.Parameters.AddWithValue("NroSerie", laSerie.NroSerie);
                cmd.Parameters.AddWithValue("RegCompraID", laSerie.RegCompraID);
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return true;
        }
        public Boolean DesactivarSerieVenta(Serie laSerie) {
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("DesactivarSerieVenta", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("IDSerie", laSerie.SerieID);
                cmd.Parameters.AddWithValue("FechaSalida", laSerie.FecSalidaSerie);
                cmd.Parameters.AddWithValue("Estado", laSerie.Estado);
                cmd.Parameters.AddWithValue("TipoComprobanteVenta",laSerie.TipoComprobanteVenta);
                cmd.Parameters.AddWithValue("ComprobanteVentaID", laSerie.ComprobanteIDVenta);
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return true;
        }
        public void ActivarSerieVendida(Int32 CodSerieID)
        {
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("ActivarSerieVendida", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("IDSerie", CodSerieID);
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
        }
        public Boolean EliminarSerie(Int32 IDSerie)
        {
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("EliminarSerie", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("Comodin", IDSerie);
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return true;
        }
        public List<Serie> ObtenerListaSeriePorRegistroCompra(Int32 CodRegCom) {
            List<Serie> lista;
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("ObtenerListaSeriePorRegCompraID", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("RegCompraID", CodRegCom);
                lista = new List<Serie>();
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    Serie laSerie = new Serie();
                    laSerie.ProductoID = Convert.ToInt32(dr["ProductoID"]);
                    laSerie.NroSerie = dr["NroSerie"].ToString();
                    laSerie.NameProduc = dr["NameProduc"].ToString();
                    laSerie.SerieID = Convert.ToInt32(dr["SerieID"]);                    
                    lista.Add(laSerie);
                }
                return lista;
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
        }
        public List<Serie> ObtenerListaSeriePorComprovanteVenta(Int32 IDComprobante, String TipoComprobante)
        {
            List<Serie> lista;
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("ObtenerListaSeriePorComprobanteVenta", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("IDComprobante",IDComprobante);
                cmd.Parameters.AddWithValue("TipoComprobante", TipoComprobante);
                lista = new List<Serie>();
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    Serie ListaSerie = new Serie();
                    ListaSerie.ProductoID = Convert.ToInt32(dr["ProductoID"]);
                    ListaSerie.NroSerie = dr["NroSerie"].ToString();
                    ListaSerie.SerieID = Convert.ToInt32(dr["SerieID"]);
                    lista.Add(ListaSerie);
                }
                return lista;
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
        }
        public DataTable ObtenerSeriePorProducto(Int32 CodProd)
        {
            DataTable lista = null;
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlDataAdapter da = new SqlDataAdapter("ObtenerListaSeriePorProductoID", cnn);
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
                da.SelectCommand.Parameters.AddWithValue("ProductoID", CodProd);
                lista = new DataTable();
                da.Fill(lista);
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return lista;
        }        
    }
}
